package com.vhly.ddxdecompiler.dexreader.file.dalv.code;

import com.vhly.ddxdecompiler.dexreader.file.dalv.code.reader.*;

/**
 * Created by IntelliJ IDEA.
 * User: vhly
 * Date: 2009-10-21
 * Time: 14:16:56
 *
 * @author vhly[FR]
 */
public final class Dops {
    private static final Dop DOPS[] = new Dop[257];
    public static final Dop SPECIAL_FORMAT;
    public static final Dop NOP;
    public static final Dop MOVE;
    public static final Dop MOVE_FROM16;
    public static final Dop MOVE_16;
    public static final Dop MOVE_WIDE;
    public static final Dop MOVE_WIDE_FROM16;
    public static final Dop MOVE_WIDE_16;
    public static final Dop MOVE_OBJECT;
    public static final Dop MOVE_OBJECT_FROM16;
    public static final Dop MOVE_OBJECT_16;
    public static final Dop MOVE_RESULT;
    public static final Dop MOVE_RESULT_WIDE;
    public static final Dop MOVE_RESULT_OBJECT;
    public static final Dop MOVE_EXCEPTION;
    public static final Dop RETURN_VOID;
    public static final Dop RETURN;
    public static final Dop RETURN_WIDE;
    public static final Dop RETURN_OBJECT;
    public static final Dop CONST_4;
    public static final Dop CONST_16;
    public static final Dop CONST;
    public static final Dop CONST_HIGH16;
    public static final Dop CONST_WIDE_16;
    public static final Dop CONST_WIDE_32;
    public static final Dop CONST_WIDE;
    public static final Dop CONST_WIDE_HIGH16;
    public static final Dop CONST_STRING;
    public static final Dop CONST_STRING_JUMBO;
    public static final Dop CONST_CLASS;
    public static final Dop MONITOR_ENTER;
    public static final Dop MONITOR_EXIT;
    public static final Dop CHECK_CAST;
    public static final Dop INSTANCE_OF;
    public static final Dop ARRAY_LENGTH;
    public static final Dop NEW_INSTANCE;
    public static final Dop NEW_ARRAY;
    public static final Dop FILLED_NEW_ARRAY;
    public static final Dop FILLED_NEW_ARRAY_RANGE;
    public static final Dop FILL_ARRAY_DATA;
    public static final Dop THROW;
    public static final Dop GOTO;
    public static final Dop GOTO_16;
    public static final Dop GOTO_32;
    public static final Dop PACKED_SWITCH;
    public static final Dop SPARSE_SWITCH;
    public static final Dop CMPL_FLOAT;
    public static final Dop CMPG_FLOAT;
    public static final Dop CMPL_DOUBLE;
    public static final Dop CMPG_DOUBLE;
    public static final Dop CMP_LONG;
    public static final Dop IF_EQ;
    public static final Dop IF_NE;
    public static final Dop IF_LT;
    public static final Dop IF_GE;
    public static final Dop IF_GT;
    public static final Dop IF_LE;
    public static final Dop IF_EQZ;
    public static final Dop IF_NEZ;
    public static final Dop IF_LTZ;
    public static final Dop IF_GEZ;
    public static final Dop IF_GTZ;
    public static final Dop IF_LEZ;
    public static final Dop AGET;
    public static final Dop AGET_WIDE;
    public static final Dop AGET_OBJECT;
    public static final Dop AGET_BOOLEAN;
    public static final Dop AGET_BYTE;
    public static final Dop AGET_CHAR;
    public static final Dop AGET_SHORT;
    public static final Dop APUT;
    public static final Dop APUT_WIDE;
    public static final Dop APUT_OBJECT;
    public static final Dop APUT_BOOLEAN;
    public static final Dop APUT_BYTE;
    public static final Dop APUT_CHAR;
    public static final Dop APUT_SHORT;
    public static final Dop IGET;
    public static final Dop IGET_WIDE;
    public static final Dop IGET_OBJECT;
    public static final Dop IGET_BOOLEAN;
    public static final Dop IGET_BYTE;
    public static final Dop IGET_CHAR;
    public static final Dop IGET_SHORT;
    public static final Dop IPUT;
    public static final Dop IPUT_WIDE;
    public static final Dop IPUT_OBJECT;
    public static final Dop IPUT_BOOLEAN;
    public static final Dop IPUT_BYTE;
    public static final Dop IPUT_CHAR;
    public static final Dop IPUT_SHORT;
    public static final Dop SGET;
    public static final Dop SGET_WIDE;
    public static final Dop SGET_OBJECT;
    public static final Dop SGET_BOOLEAN;
    public static final Dop SGET_BYTE;
    public static final Dop SGET_CHAR;
    public static final Dop SGET_SHORT;
    public static final Dop SPUT;
    public static final Dop SPUT_WIDE;
    public static final Dop SPUT_OBJECT;
    public static final Dop SPUT_BOOLEAN;
    public static final Dop SPUT_BYTE;
    public static final Dop SPUT_CHAR;
    public static final Dop SPUT_SHORT;
    public static final Dop INVOKE_VIRTUAL;
    public static final Dop INVOKE_SUPER;
    public static final Dop INVOKE_DIRECT;
    public static final Dop INVOKE_STATIC;
    public static final Dop INVOKE_INTERFACE;
    public static final Dop INVOKE_VIRTUAL_RANGE;
    public static final Dop INVOKE_SUPER_RANGE;
    public static final Dop INVOKE_DIRECT_RANGE;
    public static final Dop INVOKE_STATIC_RANGE;
    public static final Dop INVOKE_INTERFACE_RANGE;
    public static final Dop NEG_INT;
    public static final Dop NOT_INT;
    public static final Dop NEG_LONG;
    public static final Dop NOT_LONG;
    public static final Dop NEG_FLOAT;
    public static final Dop NEG_DOUBLE;
    public static final Dop INT_TO_LONG;
    public static final Dop INT_TO_FLOAT;
    public static final Dop INT_TO_DOUBLE;
    public static final Dop LONG_TO_INT;
    public static final Dop LONG_TO_FLOAT;
    public static final Dop LONG_TO_DOUBLE;
    public static final Dop FLOAT_TO_INT;
    public static final Dop FLOAT_TO_LONG;
    public static final Dop FLOAT_TO_DOUBLE;
    public static final Dop DOUBLE_TO_INT;
    public static final Dop DOUBLE_TO_LONG;
    public static final Dop DOUBLE_TO_FLOAT;
    public static final Dop INT_TO_BYTE;
    public static final Dop INT_TO_CHAR;
    public static final Dop INT_TO_SHORT;
    public static final Dop ADD_INT;
    public static final Dop SUB_INT;
    public static final Dop MUL_INT;
    public static final Dop DIV_INT;
    public static final Dop REM_INT;
    public static final Dop AND_INT;
    public static final Dop OR_INT;
    public static final Dop XOR_INT;
    public static final Dop SHL_INT;
    public static final Dop SHR_INT;
    public static final Dop USHR_INT;
    public static final Dop ADD_LONG;
    public static final Dop SUB_LONG;
    public static final Dop MUL_LONG;
    public static final Dop DIV_LONG;
    public static final Dop REM_LONG;
    public static final Dop AND_LONG;
    public static final Dop OR_LONG;
    public static final Dop XOR_LONG;
    public static final Dop SHL_LONG;
    public static final Dop SHR_LONG;
    public static final Dop USHR_LONG;
    public static final Dop ADD_FLOAT;
    public static final Dop SUB_FLOAT;
    public static final Dop MUL_FLOAT;
    public static final Dop DIV_FLOAT;
    public static final Dop REM_FLOAT;
    public static final Dop ADD_DOUBLE;
    public static final Dop SUB_DOUBLE;
    public static final Dop MUL_DOUBLE;
    public static final Dop DIV_DOUBLE;
    public static final Dop REM_DOUBLE;
    public static final Dop ADD_INT_2ADDR;
    public static final Dop SUB_INT_2ADDR;
    public static final Dop MUL_INT_2ADDR;
    public static final Dop DIV_INT_2ADDR;
    public static final Dop REM_INT_2ADDR;
    public static final Dop AND_INT_2ADDR;
    public static final Dop OR_INT_2ADDR;
    public static final Dop XOR_INT_2ADDR;
    public static final Dop SHL_INT_2ADDR;
    public static final Dop SHR_INT_2ADDR;
    public static final Dop USHR_INT_2ADDR;
    public static final Dop ADD_LONG_2ADDR;
    public static final Dop SUB_LONG_2ADDR;
    public static final Dop MUL_LONG_2ADDR;
    public static final Dop DIV_LONG_2ADDR;
    public static final Dop REM_LONG_2ADDR;
    public static final Dop AND_LONG_2ADDR;
    public static final Dop OR_LONG_2ADDR;
    public static final Dop XOR_LONG_2ADDR;
    public static final Dop SHL_LONG_2ADDR;
    public static final Dop SHR_LONG_2ADDR;
    public static final Dop USHR_LONG_2ADDR;
    public static final Dop ADD_FLOAT_2ADDR;
    public static final Dop SUB_FLOAT_2ADDR;
    public static final Dop MUL_FLOAT_2ADDR;
    public static final Dop DIV_FLOAT_2ADDR;
    public static final Dop REM_FLOAT_2ADDR;
    public static final Dop ADD_DOUBLE_2ADDR;
    public static final Dop SUB_DOUBLE_2ADDR;
    public static final Dop MUL_DOUBLE_2ADDR;
    public static final Dop DIV_DOUBLE_2ADDR;
    public static final Dop REM_DOUBLE_2ADDR;
    public static final Dop ADD_INT_LIT16;
    public static final Dop RSUB_INT;
    public static final Dop MUL_INT_LIT16;
    public static final Dop DIV_INT_LIT16;
    public static final Dop REM_INT_LIT16;
    public static final Dop AND_INT_LIT16;
    public static final Dop OR_INT_LIT16;
    public static final Dop XOR_INT_LIT16;
    public static final Dop ADD_INT_LIT8;
    public static final Dop RSUB_INT_LIT8;
    public static final Dop MUL_INT_LIT8;
    public static final Dop DIV_INT_LIT8;
    public static final Dop REM_INT_LIT8;
    public static final Dop AND_INT_LIT8;
    public static final Dop OR_INT_LIT8;
    public static final Dop XOR_INT_LIT8;
    public static final Dop SHL_INT_LIT8;
    public static final Dop SHR_INT_LIT8;
    public static final Dop USHR_INT_LIT8;

    private Dops() {
    }

    public static Dop get(int opcode) {
        int idx = opcode - -1;
        try {
            Dop result = DOPS[idx];
            if (result != null)
                return result;
        }
        catch (ArrayIndexOutOfBoundsException ex) {
            ex.printStackTrace();
        }
        throw new IllegalArgumentException("bogus opcode");
    }

    public static Dop getOrNull(int family, InsnReader format) {
        if (format == null)
            throw new NullPointerException("format == null");
        int len = DOPS.length;
        for (int i = 0; i < len; i++) {
            Dop dop = DOPS[i];
            if (dop != null && dop.getFamily() == family && dop.getInsnReader() == format)
                return dop;
        }

        return null;
    }

    private static void set(Dop opcode) {
        int idx = opcode.getOpcode() - -1;
        DOPS[idx] = opcode;
    }

    static {
        SPECIAL_FORMAT = new Dop(-1, -1, SpecialFormat.THE_ONE, false, "<special>");
        NOP = new Dop(0, 0, Form10x.THE_ONE, false, "nop");
        MOVE = new Dop(1, 1, Form12x.THE_ONE, true, "move");
        MOVE_FROM16 = new Dop(2, 1, Form22x.THE_ONE, true, "move/from16");
        MOVE_16 = new Dop(3, 1, Form32x.THE_ONE, true, "move/16");
        MOVE_WIDE = new Dop(4, 4, Form12x.THE_ONE, true, "move-wide");
        MOVE_WIDE_FROM16 = new Dop(5, 4, Form22x.THE_ONE, true, "move-wide/from16");
        MOVE_WIDE_16 = new Dop(6, 4, Form32x.THE_ONE, true, "move-wide/16");
        MOVE_OBJECT = new Dop(7, 7, Form12x.THE_ONE, true, "move-object");
        MOVE_OBJECT_FROM16 = new Dop(8, 7, Form22x.THE_ONE, true, "move-object/from16");
        MOVE_OBJECT_16 = new Dop(9, 7, Form32x.THE_ONE, true, "move-object/16");
        MOVE_RESULT = new Dop(10, 10, Form11x.THE_ONE, true, "move-result");
        MOVE_RESULT_WIDE = new Dop(11, 11, Form11x.THE_ONE, true, "move-result-wide");
        MOVE_RESULT_OBJECT = new Dop(12, 12, Form11x.THE_ONE, true, "move-result-object");
        MOVE_EXCEPTION = new Dop(13, 13, Form11x.THE_ONE, true, "move-exception");
        RETURN_VOID = new Dop(14, 14, Form10x.THE_ONE, false, "return-void");
        RETURN = new Dop(15, 15, Form11x.THE_ONE, false, "return");
        RETURN_WIDE = new Dop(16, 16, Form11x.THE_ONE, false, "return-wide");
        RETURN_OBJECT = new Dop(17, 17, Form11x.THE_ONE, false, "return-object");
        CONST_4 = new Dop(18, 20, Form11n.THE_ONE, true, "const/4");
        CONST_16 = new Dop(19, 20, Form21s.THE_ONE, true, "const/16");
        CONST = new Dop(20, 20, Form31i.THE_ONE, true, "const");
        CONST_HIGH16 = new Dop(21, 20, Form21h.THE_ONE, true, "const/high16");
        CONST_WIDE_16 = new Dop(22, 24, Form21s.THE_ONE, true, "const-wide/16");
        CONST_WIDE_32 = new Dop(23, 24, Form31i.THE_ONE, true, "const-wide/32");
        CONST_WIDE = new Dop(24, 24, Form51l.THE_ONE, true, "const-wide");
        CONST_WIDE_HIGH16 = new Dop(25, 24, Form21h.THE_ONE, true, "const-wide/high16");
        CONST_STRING = new Dop(26, 26, Form21c.THE_ONE, true, "const-string");
        CONST_STRING_JUMBO = new Dop(27, 26, Form31c.THE_ONE, true, "const-string/jumbo");
        CONST_CLASS = new Dop(28, 28, Form21c.THE_ONE, true, "const-class");
        MONITOR_ENTER = new Dop(29, 29, Form11x.THE_ONE, false, "monitor-enter");
        MONITOR_EXIT = new Dop(30, 30, Form11x.THE_ONE, false, "monitor-exit");
        CHECK_CAST = new Dop(31, 31, Form21c.THE_ONE, true, "check-cast");
        INSTANCE_OF = new Dop(32, 32, Form22c.THE_ONE, true, "instance-of");
        ARRAY_LENGTH = new Dop(33, 33, Form12x.THE_ONE, true, "array-length");
        NEW_INSTANCE = new Dop(34, 34, Form21c.THE_ONE, true, "new-instance");
        NEW_ARRAY = new Dop(35, 35, Form22c.THE_ONE, true, "new-array");
        FILLED_NEW_ARRAY = new Dop(36, 36, Form35c.THE_ONE, false, "filled-new-array");
        FILLED_NEW_ARRAY_RANGE = new Dop(37, 36, Form3rc.THE_ONE, false, "filled-new-array/range");
        FILL_ARRAY_DATA = new Dop(38, 38, Form31t.THE_ONE, false, "fill-array-data");
        THROW = new Dop(39, 39, Form11x.THE_ONE, false, "throw");
        GOTO = new Dop(40, 40, Form10t.THE_ONE, false, "goto");
        GOTO_16 = new Dop(41, 40, Form20t.THE_ONE, false, "goto/16");
        GOTO_32 = new Dop(42, 40, Form30t.THE_ONE, false, "goto/32");
        PACKED_SWITCH = new Dop(43, 43, Form31t.THE_ONE, false, "packed-switch");
        SPARSE_SWITCH = new Dop(44, 44, Form31t.THE_ONE, false, "sparse-switch");
        CMPL_FLOAT = new Dop(45, 45, Form23x.THE_ONE, true, "cmpl-float");
        CMPG_FLOAT = new Dop(46, 46, Form23x.THE_ONE, true, "cmpg-float");
        CMPL_DOUBLE = new Dop(47, 47, Form23x.THE_ONE, true, "cmpl-double");
        CMPG_DOUBLE = new Dop(48, 48, Form23x.THE_ONE, true, "cmpg-double");
        CMP_LONG = new Dop(49, 49, Form23x.THE_ONE, true, "cmp-long");
        IF_EQ = new Dop(50, 50, Form22t.THE_ONE, false, "if-eq");
        IF_NE = new Dop(51, 51, Form22t.THE_ONE, false, "if-ne");
        IF_LT = new Dop(52, 52, Form22t.THE_ONE, false, "if-lt");
        IF_GE = new Dop(53, 53, Form22t.THE_ONE, false, "if-ge");
        IF_GT = new Dop(54, 54, Form22t.THE_ONE, false, "if-gt");
        IF_LE = new Dop(55, 55, Form22t.THE_ONE, false, "if-le");
        IF_EQZ = new Dop(56, 56, Form21t.THE_ONE, false, "if-eqz");
        IF_NEZ = new Dop(57, 57, Form21t.THE_ONE, false, "if-nez");
        IF_LTZ = new Dop(58, 58, Form21t.THE_ONE, false, "if-ltz");
        IF_GEZ = new Dop(59, 59, Form21t.THE_ONE, false, "if-gez");
        IF_GTZ = new Dop(60, 60, Form21t.THE_ONE, false, "if-gtz");
        IF_LEZ = new Dop(61, 61, Form21t.THE_ONE, false, "if-lez");
        AGET = new Dop(68, 68, Form23x.THE_ONE, true, "aget");
        AGET_WIDE = new Dop(69, 69, Form23x.THE_ONE, true, "aget-wide");
        AGET_OBJECT = new Dop(70, 70, Form23x.THE_ONE, true, "aget-object");
        AGET_BOOLEAN = new Dop(71, 71, Form23x.THE_ONE, true, "aget-boolean");
        AGET_BYTE = new Dop(72, 72, Form23x.THE_ONE, true, "aget-byte");
        AGET_CHAR = new Dop(73, 73, Form23x.THE_ONE, true, "aget-char");
        AGET_SHORT = new Dop(74, 74, Form23x.THE_ONE, true, "aget-short");
        APUT = new Dop(75, 75, Form23x.THE_ONE, false, "aput");
        APUT_WIDE = new Dop(76, 76, Form23x.THE_ONE, false, "aput-wide");
        APUT_OBJECT = new Dop(77, 77, Form23x.THE_ONE, false, "aput-object");
        APUT_BOOLEAN = new Dop(78, 78, Form23x.THE_ONE, false, "aput-boolean");
        APUT_BYTE = new Dop(79, 79, Form23x.THE_ONE, false, "aput-byte");
        APUT_CHAR = new Dop(80, 80, Form23x.THE_ONE, false, "aput-char");
        APUT_SHORT = new Dop(81, 81, Form23x.THE_ONE, false, "aput-short");
        IGET = new Dop(82, 82, Form22c.THE_ONE, true, "iget");
        IGET_WIDE = new Dop(83, 83, Form22c.THE_ONE, true, "iget-wide");
        IGET_OBJECT = new Dop(84, 84, Form22c.THE_ONE, true, "iget-object");
        IGET_BOOLEAN = new Dop(85, 85, Form22c.THE_ONE, true, "iget-boolean");
        IGET_BYTE = new Dop(86, 86, Form22c.THE_ONE, true, "iget-byte");
        IGET_CHAR = new Dop(87, 87, Form22c.THE_ONE, true, "iget-char");
        IGET_SHORT = new Dop(88, 88, Form22c.THE_ONE, true, "iget-short");
        IPUT = new Dop(89, 89, Form22c.THE_ONE, false, "iput");
        IPUT_WIDE = new Dop(90, 90, Form22c.THE_ONE, false, "iput-wide");
        IPUT_OBJECT = new Dop(91, 91, Form22c.THE_ONE, false, "iput-object");
        IPUT_BOOLEAN = new Dop(92, 92, Form22c.THE_ONE, false, "iput-boolean");
        IPUT_BYTE = new Dop(93, 93, Form22c.THE_ONE, false, "iput-byte");
        IPUT_CHAR = new Dop(94, 94, Form22c.THE_ONE, false, "iput-char");
        IPUT_SHORT = new Dop(95, 95, Form22c.THE_ONE, false, "iput-short");
        SGET = new Dop(96, 96, Form21c.THE_ONE, true, "sget");
        SGET_WIDE = new Dop(97, 97, Form21c.THE_ONE, true, "sget-wide");
        SGET_OBJECT = new Dop(98, 98, Form21c.THE_ONE, true, "sget-object");
        SGET_BOOLEAN = new Dop(99, 99, Form21c.THE_ONE, true, "sget-boolean");
        SGET_BYTE = new Dop(100, 100, Form21c.THE_ONE, true, "sget-byte");
        SGET_CHAR = new Dop(101, 101, Form21c.THE_ONE, true, "sget-char");
        SGET_SHORT = new Dop(102, 102, Form21c.THE_ONE, true, "sget-short");
        SPUT = new Dop(103, 103, Form21c.THE_ONE, false, "sput");
        SPUT_WIDE = new Dop(104, 104, Form21c.THE_ONE, false, "sput-wide");
        SPUT_OBJECT = new Dop(105, 105, Form21c.THE_ONE, false, "sput-object");
        SPUT_BOOLEAN = new Dop(106, 106, Form21c.THE_ONE, false, "sput-boolean");
        SPUT_BYTE = new Dop(107, 107, Form21c.THE_ONE, false, "sput-byte");
        SPUT_CHAR = new Dop(108, 108, Form21c.THE_ONE, false, "sput-char");
        SPUT_SHORT = new Dop(109, 109, Form21c.THE_ONE, false, "sput-short");
        INVOKE_VIRTUAL = new Dop(110, 110, Form35c.THE_ONE, false, "invoke-virtual");
        INVOKE_SUPER = new Dop(111, 111, Form35c.THE_ONE, false, "invoke-super");
        INVOKE_DIRECT = new Dop(112, 112, Form35c.THE_ONE, false, "invoke-direct");
        INVOKE_STATIC = new Dop(113, 113, Form35c.THE_ONE, false, "invoke-static");
        INVOKE_INTERFACE = new Dop(114, 114, Form35c.THE_ONE, false, "invoke-interface");
        INVOKE_VIRTUAL_RANGE = new Dop(116, 110, Form3rc.THE_ONE, false, "invoke-virtual/range");
        INVOKE_SUPER_RANGE = new Dop(117, 111, Form3rc.THE_ONE, false, "invoke-super/range");
        INVOKE_DIRECT_RANGE = new Dop(118, 112, Form3rc.THE_ONE, false, "invoke-direct/range");
        INVOKE_STATIC_RANGE = new Dop(119, 113, Form3rc.THE_ONE, false, "invoke-static/range");
        INVOKE_INTERFACE_RANGE = new Dop(120, 114, Form3rc.THE_ONE, false, "invoke-interface/range");
        NEG_INT = new Dop(123, 123, Form12x.THE_ONE, true, "neg-int");
        NOT_INT = new Dop(124, 124, Form12x.THE_ONE, true, "not-int");
        NEG_LONG = new Dop(125, 125, Form12x.THE_ONE, true, "neg-long");
        NOT_LONG = new Dop(126, 126, Form12x.THE_ONE, true, "not-long");
        NEG_FLOAT = new Dop(127, 127, Form12x.THE_ONE, true, "neg-float");
        NEG_DOUBLE = new Dop(128, 128, Form12x.THE_ONE, true, "neg-double");
        INT_TO_LONG = new Dop(129, 129, Form12x.THE_ONE, true, "int-to-long");
        INT_TO_FLOAT = new Dop(130, 130, Form12x.THE_ONE, true, "int-to-float");
        INT_TO_DOUBLE = new Dop(131, 131, Form12x.THE_ONE, true, "int-to-double");
        LONG_TO_INT = new Dop(132, 132, Form12x.THE_ONE, true, "long-to-int");
        LONG_TO_FLOAT = new Dop(133, 133, Form12x.THE_ONE, true, "long-to-float");
        LONG_TO_DOUBLE = new Dop(134, 134, Form12x.THE_ONE, true, "long-to-double");
        FLOAT_TO_INT = new Dop(135, 135, Form12x.THE_ONE, true, "float-to-int");
        FLOAT_TO_LONG = new Dop(136, 136, Form12x.THE_ONE, true, "float-to-long");
        FLOAT_TO_DOUBLE = new Dop(137, 137, Form12x.THE_ONE, true, "float-to-double");
        DOUBLE_TO_INT = new Dop(138, 138, Form12x.THE_ONE, true, "double-to-int");
        DOUBLE_TO_LONG = new Dop(139, 139, Form12x.THE_ONE, true, "double-to-long");
        DOUBLE_TO_FLOAT = new Dop(140, 140, Form12x.THE_ONE, true, "double-to-float");
        INT_TO_BYTE = new Dop(141, 141, Form12x.THE_ONE, true, "int-to-byte");
        INT_TO_CHAR = new Dop(142, 142, Form12x.THE_ONE, true, "int-to-char");
        INT_TO_SHORT = new Dop(143, 143, Form12x.THE_ONE, true, "int-to-short");
        ADD_INT = new Dop(144, 144, Form23x.THE_ONE, true, "add-int");
        SUB_INT = new Dop(145, 145, Form23x.THE_ONE, true, "sub-int");
        MUL_INT = new Dop(146, 146, Form23x.THE_ONE, true, "mul-int");
        DIV_INT = new Dop(147, 147, Form23x.THE_ONE, true, "div-int");
        REM_INT = new Dop(148, 148, Form23x.THE_ONE, true, "rem-int");
        AND_INT = new Dop(149, 149, Form23x.THE_ONE, true, "and-int");
        OR_INT = new Dop(150, 150, Form23x.THE_ONE, true, "or-int");
        XOR_INT = new Dop(151, 151, Form23x.THE_ONE, true, "xor-int");
        SHL_INT = new Dop(152, 152, Form23x.THE_ONE, true, "shl-int");
        SHR_INT = new Dop(153, 153, Form23x.THE_ONE, true, "shr-int");
        USHR_INT = new Dop(154, 154, Form23x.THE_ONE, true, "ushr-int");
        ADD_LONG = new Dop(155, 155, Form23x.THE_ONE, true, "add-long");
        SUB_LONG = new Dop(156, 156, Form23x.THE_ONE, true, "sub-long");
        MUL_LONG = new Dop(157, 157, Form23x.THE_ONE, true, "mul-long");
        DIV_LONG = new Dop(158, 158, Form23x.THE_ONE, true, "div-long");
        REM_LONG = new Dop(159, 159, Form23x.THE_ONE, true, "rem-long");
        AND_LONG = new Dop(160, 160, Form23x.THE_ONE, true, "and-long");
        OR_LONG = new Dop(161, 161, Form23x.THE_ONE, true, "or-long");
        XOR_LONG = new Dop(162, 162, Form23x.THE_ONE, true, "xor-long");
        SHL_LONG = new Dop(163, 163, Form23x.THE_ONE, true, "shl-long");
        SHR_LONG = new Dop(164, 164, Form23x.THE_ONE, true, "shr-long");
        USHR_LONG = new Dop(165, 165, Form23x.THE_ONE, true, "ushr-long");
        ADD_FLOAT = new Dop(166, 166, Form23x.THE_ONE, true, "add-float");
        SUB_FLOAT = new Dop(167, 167, Form23x.THE_ONE, true, "sub-float");
        MUL_FLOAT = new Dop(168, 168, Form23x.THE_ONE, true, "mul-float");
        DIV_FLOAT = new Dop(169, 169, Form23x.THE_ONE, true, "div-float");
        REM_FLOAT = new Dop(170, 170, Form23x.THE_ONE, true, "rem-float");
        ADD_DOUBLE = new Dop(171, 171, Form23x.THE_ONE, true, "add-double");
        SUB_DOUBLE = new Dop(172, 172, Form23x.THE_ONE, true, "sub-double");
        MUL_DOUBLE = new Dop(173, 173, Form23x.THE_ONE, true, "mul-double");
        DIV_DOUBLE = new Dop(174, 174, Form23x.THE_ONE, true, "div-double");
        REM_DOUBLE = new Dop(175, 175, Form23x.THE_ONE, true, "rem-double");
        ADD_INT_2ADDR = new Dop(176, 144, Form12x.THE_ONE, true, "add-int/2addr");
        SUB_INT_2ADDR = new Dop(177, 145, Form12x.THE_ONE, true, "sub-int/2addr");
        MUL_INT_2ADDR = new Dop(178, 146, Form12x.THE_ONE, true, "mul-int/2addr");
        DIV_INT_2ADDR = new Dop(179, 147, Form12x.THE_ONE, true, "div-int/2addr");
        REM_INT_2ADDR = new Dop(180, 148, Form12x.THE_ONE, true, "rem-int/2addr");
        AND_INT_2ADDR = new Dop(181, 149, Form12x.THE_ONE, true, "and-int/2addr");
        OR_INT_2ADDR = new Dop(182, 150, Form12x.THE_ONE, true, "or-int/2addr");
        XOR_INT_2ADDR = new Dop(183, 151, Form12x.THE_ONE, true, "xor-int/2addr");
        SHL_INT_2ADDR = new Dop(184, 152, Form12x.THE_ONE, true, "shl-int/2addr");
        SHR_INT_2ADDR = new Dop(185, 153, Form12x.THE_ONE, true, "shr-int/2addr");
        USHR_INT_2ADDR = new Dop(186, 154, Form12x.THE_ONE, true, "ushr-int/2addr");
        ADD_LONG_2ADDR = new Dop(187, 155, Form12x.THE_ONE, true, "add-long/2addr");
        SUB_LONG_2ADDR = new Dop(188, 156, Form12x.THE_ONE, true, "sub-long/2addr");
        MUL_LONG_2ADDR = new Dop(189, 157, Form12x.THE_ONE, true, "mul-long/2addr");
        DIV_LONG_2ADDR = new Dop(190, 158, Form12x.THE_ONE, true, "div-long/2addr");
        REM_LONG_2ADDR = new Dop(191, 159, Form12x.THE_ONE, true, "rem-long/2addr");
        AND_LONG_2ADDR = new Dop(192, 160, Form12x.THE_ONE, true, "and-long/2addr");
        OR_LONG_2ADDR = new Dop(193, 161, Form12x.THE_ONE, true, "or-long/2addr");
        XOR_LONG_2ADDR = new Dop(194, 162, Form12x.THE_ONE, true, "xor-long/2addr");
        SHL_LONG_2ADDR = new Dop(195, 163, Form12x.THE_ONE, true, "shl-long/2addr");
        SHR_LONG_2ADDR = new Dop(196, 164, Form12x.THE_ONE, true, "shr-long/2addr");
        USHR_LONG_2ADDR = new Dop(197, 165, Form12x.THE_ONE, true, "ushr-long/2addr");
        ADD_FLOAT_2ADDR = new Dop(198, 166, Form12x.THE_ONE, true, "add-float/2addr");
        SUB_FLOAT_2ADDR = new Dop(199, 167, Form12x.THE_ONE, true, "sub-float/2addr");
        MUL_FLOAT_2ADDR = new Dop(200, 168, Form12x.THE_ONE, true, "mul-float/2addr");
        DIV_FLOAT_2ADDR = new Dop(201, 169, Form12x.THE_ONE, true, "div-float/2addr");
        REM_FLOAT_2ADDR = new Dop(202, 170, Form12x.THE_ONE, true, "rem-float/2addr");
        ADD_DOUBLE_2ADDR = new Dop(203, 171, Form12x.THE_ONE, true, "add-double/2addr");
        SUB_DOUBLE_2ADDR = new Dop(204, 172, Form12x.THE_ONE, true, "sub-double/2addr");
        MUL_DOUBLE_2ADDR = new Dop(205, 173, Form12x.THE_ONE, true, "mul-double/2addr");
        DIV_DOUBLE_2ADDR = new Dop(206, 174, Form12x.THE_ONE, true, "div-double/2addr");
        REM_DOUBLE_2ADDR = new Dop(207, 175, Form12x.THE_ONE, true, "rem-double/2addr");
        ADD_INT_LIT16 = new Dop(208, 144, Form22s.THE_ONE, true, "add-int/lit16");
        RSUB_INT = new Dop(209, 209, Form22s.THE_ONE, true, "rsub-int");
        MUL_INT_LIT16 = new Dop(210, 146, Form22s.THE_ONE, true, "mul-int/lit16");
        DIV_INT_LIT16 = new Dop(211, 147, Form22s.THE_ONE, true, "div-int/lit16");
        REM_INT_LIT16 = new Dop(212, 148, Form22s.THE_ONE, true, "rem-int/lit16");
        AND_INT_LIT16 = new Dop(213, 149, Form22s.THE_ONE, true, "and-int/lit16");
        OR_INT_LIT16 = new Dop(214, 150, Form22s.THE_ONE, true, "or-int/lit16");
        XOR_INT_LIT16 = new Dop(215, 151, Form22s.THE_ONE, true, "xor-int/lit16");
        ADD_INT_LIT8 = new Dop(216, 144, Form22b.THE_ONE, true, "add-int/lit8");
        RSUB_INT_LIT8 = new Dop(217, 209, Form22b.THE_ONE, true, "rsub-int/lit8");
        MUL_INT_LIT8 = new Dop(218, 146, Form22b.THE_ONE, true, "mul-int/lit8");
        DIV_INT_LIT8 = new Dop(219, 147, Form22b.THE_ONE, true, "div-int/lit8");
        REM_INT_LIT8 = new Dop(220, 148, Form22b.THE_ONE, true, "rem-int/lit8");
        AND_INT_LIT8 = new Dop(221, 149, Form22b.THE_ONE, true, "and-int/lit8");
        OR_INT_LIT8 = new Dop(222, 150, Form22b.THE_ONE, true, "or-int/lit8");
        XOR_INT_LIT8 = new Dop(223, 151, Form22b.THE_ONE, true, "xor-int/lit8");
        SHL_INT_LIT8 = new Dop(224, 152, Form22b.THE_ONE, true, "shl-int/lit8");
        SHR_INT_LIT8 = new Dop(225, 153, Form22b.THE_ONE, true, "shr-int/lit8");
        USHR_INT_LIT8 = new Dop(226, 154, Form22b.THE_ONE, true, "ushr-int/lit8");
        set(SPECIAL_FORMAT);
        set(NOP);
        set(MOVE);
        set(MOVE_FROM16);
        set(MOVE_16);
        set(MOVE_WIDE);
        set(MOVE_WIDE_FROM16);
        set(MOVE_WIDE_16);
        set(MOVE_OBJECT);
        set(MOVE_OBJECT_FROM16);
        set(MOVE_OBJECT_16);
        set(MOVE_RESULT);
        set(MOVE_RESULT_WIDE);
        set(MOVE_RESULT_OBJECT);
        set(MOVE_EXCEPTION);
        set(RETURN_VOID);
        set(RETURN);
        set(RETURN_WIDE);
        set(RETURN_OBJECT);
        set(CONST_4);
        set(CONST_16);
        set(CONST);
        set(CONST_HIGH16);
        set(CONST_WIDE_16);
        set(CONST_WIDE_32);
        set(CONST_WIDE);
        set(CONST_WIDE_HIGH16);
        set(CONST_STRING);
        set(CONST_STRING_JUMBO);
        set(CONST_CLASS);
        set(MONITOR_ENTER);
        set(MONITOR_EXIT);
        set(CHECK_CAST);
        set(INSTANCE_OF);
        set(ARRAY_LENGTH);
        set(NEW_INSTANCE);
        set(NEW_ARRAY);
        set(FILLED_NEW_ARRAY);
        set(FILLED_NEW_ARRAY_RANGE);
        set(FILL_ARRAY_DATA);
        set(THROW);
        set(GOTO);
        set(GOTO_16);
        set(GOTO_32);
        set(PACKED_SWITCH);
        set(SPARSE_SWITCH);
        set(CMPL_FLOAT);
        set(CMPG_FLOAT);
        set(CMPL_DOUBLE);
        set(CMPG_DOUBLE);
        set(CMP_LONG);
        set(IF_EQ);
        set(IF_NE);
        set(IF_LT);
        set(IF_GE);
        set(IF_GT);
        set(IF_LE);
        set(IF_EQZ);
        set(IF_NEZ);
        set(IF_LTZ);
        set(IF_GEZ);
        set(IF_GTZ);
        set(IF_LEZ);
        set(AGET);
        set(AGET_WIDE);
        set(AGET_OBJECT);
        set(AGET_BOOLEAN);
        set(AGET_BYTE);
        set(AGET_CHAR);
        set(AGET_SHORT);
        set(APUT);
        set(APUT_WIDE);
        set(APUT_OBJECT);
        set(APUT_BOOLEAN);
        set(APUT_BYTE);
        set(APUT_CHAR);
        set(APUT_SHORT);
        set(IGET);
        set(IGET_WIDE);
        set(IGET_OBJECT);
        set(IGET_BOOLEAN);
        set(IGET_BYTE);
        set(IGET_CHAR);
        set(IGET_SHORT);
        set(IPUT);
        set(IPUT_WIDE);
        set(IPUT_OBJECT);
        set(IPUT_BOOLEAN);
        set(IPUT_BYTE);
        set(IPUT_CHAR);
        set(IPUT_SHORT);
        set(SGET);
        set(SGET_WIDE);
        set(SGET_OBJECT);
        set(SGET_BOOLEAN);
        set(SGET_BYTE);
        set(SGET_CHAR);
        set(SGET_SHORT);
        set(SPUT);
        set(SPUT_WIDE);
        set(SPUT_OBJECT);
        set(SPUT_BOOLEAN);
        set(SPUT_BYTE);
        set(SPUT_CHAR);
        set(SPUT_SHORT);
        set(INVOKE_VIRTUAL);
        set(INVOKE_SUPER);
        set(INVOKE_DIRECT);
        set(INVOKE_STATIC);
        set(INVOKE_INTERFACE);
        set(INVOKE_VIRTUAL_RANGE);
        set(INVOKE_SUPER_RANGE);
        set(INVOKE_DIRECT_RANGE);
        set(INVOKE_STATIC_RANGE);
        set(INVOKE_INTERFACE_RANGE);
        set(NEG_INT);
        set(NOT_INT);
        set(NEG_LONG);
        set(NOT_LONG);
        set(NEG_FLOAT);
        set(NEG_DOUBLE);
        set(INT_TO_LONG);
        set(INT_TO_FLOAT);
        set(INT_TO_DOUBLE);
        set(LONG_TO_INT);
        set(LONG_TO_FLOAT);
        set(LONG_TO_DOUBLE);
        set(FLOAT_TO_INT);
        set(FLOAT_TO_LONG);
        set(FLOAT_TO_DOUBLE);
        set(DOUBLE_TO_INT);
        set(DOUBLE_TO_LONG);
        set(DOUBLE_TO_FLOAT);
        set(INT_TO_BYTE);
        set(INT_TO_CHAR);
        set(INT_TO_SHORT);
        set(ADD_INT);
        set(SUB_INT);
        set(MUL_INT);
        set(DIV_INT);
        set(REM_INT);
        set(AND_INT);
        set(OR_INT);
        set(XOR_INT);
        set(SHL_INT);
        set(SHR_INT);
        set(USHR_INT);
        set(ADD_LONG);
        set(SUB_LONG);
        set(MUL_LONG);
        set(DIV_LONG);
        set(REM_LONG);
        set(AND_LONG);
        set(OR_LONG);
        set(XOR_LONG);
        set(SHL_LONG);
        set(SHR_LONG);
        set(USHR_LONG);
        set(ADD_FLOAT);
        set(SUB_FLOAT);
        set(MUL_FLOAT);
        set(DIV_FLOAT);
        set(REM_FLOAT);
        set(ADD_DOUBLE);
        set(SUB_DOUBLE);
        set(MUL_DOUBLE);
        set(DIV_DOUBLE);
        set(REM_DOUBLE);
        set(ADD_INT_2ADDR);
        set(SUB_INT_2ADDR);
        set(MUL_INT_2ADDR);
        set(DIV_INT_2ADDR);
        set(REM_INT_2ADDR);
        set(AND_INT_2ADDR);
        set(OR_INT_2ADDR);
        set(XOR_INT_2ADDR);
        set(SHL_INT_2ADDR);
        set(SHR_INT_2ADDR);
        set(USHR_INT_2ADDR);
        set(ADD_LONG_2ADDR);
        set(SUB_LONG_2ADDR);
        set(MUL_LONG_2ADDR);
        set(DIV_LONG_2ADDR);
        set(REM_LONG_2ADDR);
        set(AND_LONG_2ADDR);
        set(OR_LONG_2ADDR);
        set(XOR_LONG_2ADDR);
        set(SHL_LONG_2ADDR);
        set(SHR_LONG_2ADDR);
        set(USHR_LONG_2ADDR);
        set(ADD_FLOAT_2ADDR);
        set(SUB_FLOAT_2ADDR);
        set(MUL_FLOAT_2ADDR);
        set(DIV_FLOAT_2ADDR);
        set(REM_FLOAT_2ADDR);
        set(ADD_DOUBLE_2ADDR);
        set(SUB_DOUBLE_2ADDR);
        set(MUL_DOUBLE_2ADDR);
        set(DIV_DOUBLE_2ADDR);
        set(REM_DOUBLE_2ADDR);
        set(ADD_INT_LIT16);
        set(RSUB_INT);
        set(MUL_INT_LIT16);
        set(DIV_INT_LIT16);
        set(REM_INT_LIT16);
        set(AND_INT_LIT16);
        set(OR_INT_LIT16);
        set(XOR_INT_LIT16);
        set(ADD_INT_LIT8);
        set(RSUB_INT_LIT8);
        set(MUL_INT_LIT8);
        set(DIV_INT_LIT8);
        set(REM_INT_LIT8);
        set(AND_INT_LIT8);
        set(OR_INT_LIT8);
        set(XOR_INT_LIT8);
        set(SHL_INT_LIT8);
        set(SHR_INT_LIT8);
        set(USHR_INT_LIT8);
    }
}
